// 所在包
package com.example.listcontainerdemo.slice;
// 模块引入
import com.example.listcontainerdemo.ResourceTable;
import ohos.agp.components.*;
import ohos.app.Context;
import java.util.List;
// 定义数据源类
public class ItemProvider extends BaseItemProvider {
    // 用来渲染列表项的数据模型集合
    private List<ItemModel> dataList;
    // 上下文对象
    private Context context;
    // 自定义构造方法，传入模型列表和上下文
    public ItemProvider(List<ItemModel> list, Context context) {
        this.dataList = list;
        this.context = context;
    }
    // 子类复写此方法来返回列表视图的列表项数
    @Override
    public int getCount() {
        return dataList.size();
    }
    // 子类复写此方法来返回具体列表项对应的数据模型
    @Override
    public Object getItem(int i) {
        return dataList.get(i);
    }
    // 子类复写此方法来返回列表项的id
    @Override
    public long getItemId(int i) {
        return i;
    }
    // 子类复写此方法来提供每个列表项具体渲染的组件
    @Override
    public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
        // 参数中的component是可进行复用的组件
        Component componentRes;
        ItemHolder itemHolder;
        if (component != null) {
            // 存在则进行复用
            componentRes = component;
            // 获取绑定的ItemHolder对象
            itemHolder = (ItemHolder) componentRes.getTag();
        } else {
            // 不存在则新建
            componentRes = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_ListItem, null, false);
            // 新建ItemHolder
            itemHolder = new ItemHolder(componentRes);
            // 将ItemHolder绑定到组件上
            componentRes.setTag(itemHolder);
        }
        // 获取要渲染的数据模型
        ItemModel model = dataList.get(i);
        // 直接使用ItemHolder中的属性来设置文本
        itemHolder.titleText.setText(model.getName());
        // 返回组件
        return componentRes;
    }
}
